package com.geo.entity;

import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.geo.entity.base.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 企业实体类
 * 定义企业信息和业务相关字段
 * 
 * @author GEO Team
 * @version 1.0.0
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("biz_business")
public class Business extends BaseEntity {
    
    /**
     * 企业编码 - 唯一标识
     */
    @TableField("business_code")
    private String businessCode;
    
    /**
     * 企业名称
     */
    @TableField("business_name")
    private String businessName;
    
    /**
     * 企业简称
     */
    @TableField("short_name")
    private String shortName;
    
    /**
     * 企业英文名称
     */
    @TableField("english_name")
    private String englishName;
    
    /**
     * 企业logo URL
     */
    @TableField("logo_url")
    private String logoUrl;
    
    /**
     * 企业描述
     */
    @TableField("description")
    private String description;
    
    /**
     * 企业官网
     */
    @TableField("website")
    private String website;
    
    /**
     * 行业分类
     */
    @TableField("industry")
    private String industry;
    
    /**
     * 子行业分类
     */
    @TableField("sub_industry")
    private String subIndustry;
    
    /**
     * 企业规模 - STARTUP:初创 SMALL:小型 MEDIUM:中型 LARGE:大型 ENTERPRISE:企业级
     */
    @TableField("company_size")
    private String companySize;
    
    /**
     * 企业类型 - PERSONAL:个体 COMPANY:公司 CORPORATION:集团
     */
    @TableField("business_type")
    private String businessType;
    
    /**
     * 注册资本
     */
    @TableField("registered_capital")
    private BigDecimal registeredCapital;
    
    /**
     * 成立时间
     */
    @TableField("established_date")
    private LocalDateTime establishedDate;
    
    /**
     * 统一社会信用代码
     */
    @TableField("credit_code")
    private String creditCode;
    
    /**
     * 营业执照号
     */
    @TableField("business_license")
    private String businessLicense;
    
    /**
     * 税务登记号
     */
    @TableField("tax_registration_no")
    private String taxRegistrationNo;
    
    /**
     * 法定代表人
     */
    @TableField("legal_representative")
    private String legalRepresentative;
    
    /**
     * 联系人姓名
     */
    @TableField("contact_name")
    private String contactName;
    
    /**
     * 联系人职位
     */
    @TableField("contact_position")
    private String contactPosition;
    
    /**
     * 联系电话
     */
    @TableField("contact_phone")
    private String contactPhone;
    
    /**
     * 联系邮箱
     */
    @TableField("contact_email")
    private String contactEmail;
    
    /**
     * 注册地址
     */
    @TableField("registered_address")
    private String registeredAddress;
    
    /**
     * 办公地址
     */
    @TableField("office_address")
    private String officeAddress;
    
    /**
     * 所在城市
     */
    @TableField("city")
    private String city;
    
    /**
     * 所在省份/州
     */
    @TableField("province")
    private String province;
    
    /**
     * 所在国家
     */
    @TableField("country")
    private String country;
    
    /**
     * 邮政编码
     */
    @TableField("postal_code")
    private String postalCode;
    
    /**
     * 时区
     */
    @TableField("timezone")
    private String timezone;
    
    /**
     * 主要语言
     */
    @TableField("primary_language")
    private String primaryLanguage;
    
    /**
     * 目标市场 - JSON数组格式
     */
    @TableField("target_markets")
    private String targetMarkets;
    
    /**
     * 主要产品/服务 - JSON数组格式
     */
    @TableField("main_products")
    private String mainProducts;
    
    /**
     * 核心关键词 - JSON数组格式
     */
    @TableField("core_keywords")
    private String coreKeywords;
    
    /**
     * 竞争对手 - JSON数组格式
     */
    @TableField("competitors")
    private String competitors;
    
    /**
     * 品牌价值主张
     */
    @TableField("value_proposition")
    private String valueProposition;
    
    /**
     * 目标客户群体
     */
    @TableField("target_audience")
    private String targetAudience;
    
    /**
     * 营销预算
     */
    @TableField("marketing_budget")
    private BigDecimal marketingBudget;
    
    /**
     * 年营业额
     */
    @TableField("annual_revenue")
    private BigDecimal annualRevenue;
    
    /**
     * 员工数量
     */
    @TableField("employee_count")
    private Integer employeeCount;
    
    /**
     * 验证状态 - PENDING:待验证 VERIFIED:已验证 REJECTED:已拒绝
     */
    @TableField("verification_status")
    private String verificationStatus;
    
    /**
     * 验证时间
     */
    @TableField("verification_time")
    private LocalDateTime verificationTime;
    
    /**
     * 验证备注
     */
    @TableField("verification_remark")
    private String verificationRemark;
    
    /**
     * 账户状态 - ACTIVE:激活 SUSPENDED:暂停 EXPIRED:过期 CANCELLED:取消
     */
    @TableField("account_status")
    private String accountStatus;
    
    /**
     * 订阅计划 - TRIAL:试用 BASIC:基础版 STANDARD:标准版 PREMIUM:高级版 ENTERPRISE:企业版
     */
    @TableField("subscription_plan")
    private String subscriptionPlan;
    
    /**
     * 订阅开始时间
     */
    @TableField("subscription_start_time")
    private LocalDateTime subscriptionStartTime;
    
    /**
     * 订阅结束时间
     */
    @TableField("subscription_end_time")
    private LocalDateTime subscriptionEndTime;
    
    /**
     * API调用限制（每月）
     */
    @TableField("api_limit_monthly")
    private Long apiLimitMonthly;
    
    /**
     * 内容生成限制（每月）
     */
    @TableField("content_limit_monthly")
    private Long contentLimitMonthly;
    
    /**
     * 关键词监控限制
     */
    @TableField("keyword_limit")
    private Integer keywordLimit;
    
    /**
     * 数据保留天数
     */
    @TableField("data_retention_days")
    private Integer dataRetentionDays;
    
    /**
     * 企业配置 - JSON格式
     */
    @TableField("business_config")
    private String businessConfig;
    
    /**
     * 企业标签 - 逗号分隔
     */
    @TableField("tags")
    private String tags;
    
    /**
     * 社交媒体账号 - JSON格式
     */
    @TableField("social_media")
    private String socialMedia;
    
    /**
     * 认证文件 - JSON数组格式，存储文件路径
     */
    @TableField("certification_files")
    private String certificationFiles;
    
    /**
     * 最后活跃时间
     */
    @TableField("last_active_time")
    private LocalDateTime lastActiveTime;
    
    /**
     * 企业规模常量
     */
    public static class CompanySize {
        public static final String STARTUP = "STARTUP";             // 初创（1-10人）
        public static final String SMALL = "SMALL";                 // 小型（11-50人）
        public static final String MEDIUM = "MEDIUM";               // 中型（51-200人）
        public static final String LARGE = "LARGE";                 // 大型（201-1000人）
        public static final String ENTERPRISE = "ENTERPRISE";       // 企业级（1000+人）
    }
    
    /**
     * 企业类型常量
     */
    public static class BusinessType {
        public static final String PERSONAL = "PERSONAL";           // 个体
        public static final String COMPANY = "COMPANY";             // 公司
        public static final String CORPORATION = "CORPORATION";     // 集团
    }
    
    /**
     * 验证状态常量
     */
    public static class VerificationStatus {
        public static final String PENDING = "PENDING";             // 待验证
        public static final String VERIFIED = "VERIFIED";           // 已验证
        public static final String REJECTED = "REJECTED";           // 已拒绝
    }
    
    /**
     * 账户状态常量
     */
    public static class AccountStatus {
        public static final String ACTIVE = "ACTIVE";               // 激活
        public static final String SUSPENDED = "SUSPENDED";         // 暂停
        public static final String EXPIRED = "EXPIRED";             // 过期
        public static final String CANCELLED = "CANCELLED";         // 取消
    }
    
    /**
     * 订阅计划常量
     */
    public static class SubscriptionPlan {
        public static final String TRIAL = "TRIAL";                 // 试用版
        public static final String BASIC = "BASIC";                 // 基础版
        public static final String STANDARD = "STANDARD";           // 标准版
        public static final String PREMIUM = "PREMIUM";             // 高级版
        public static final String ENTERPRISE = "ENTERPRISE";       // 企业版
    }
    
    // 手动添加缺失的getter和setter方法
    public String getBusinessName() {
        return businessName;
    }
    
    public void setBusinessName(String businessName) {
        this.businessName = businessName;
    }
    
    public String getCreditCode() {
        return creditCode;
    }
    
    public void setCreditCode(String creditCode) {
        this.creditCode = creditCode;
    }
    
    public String getBusinessCode() {
        return businessCode;
    }
    
    public void setBusinessCode(String businessCode) {
        this.businessCode = businessCode;
    }
    
    public String getVerificationStatus() {
        return verificationStatus;
    }
    
    public void setVerificationStatus(String verificationStatus) {
        this.verificationStatus = verificationStatus;
    }
    
    public String getAccountStatus() {
        return accountStatus;
    }
    
    public void setAccountStatus(String accountStatus) {
        this.accountStatus = accountStatus;
    }
    
    public String getSubscriptionPlan() {
        return subscriptionPlan;
    }
    
    public void setSubscriptionPlan(String subscriptionPlan) {
        this.subscriptionPlan = subscriptionPlan;
    }
    
    public LocalDateTime getSubscriptionStartTime() {
        return subscriptionStartTime;
    }
    
    public void setSubscriptionStartTime(LocalDateTime subscriptionStartTime) {
        this.subscriptionStartTime = subscriptionStartTime;
    }
    
    public LocalDateTime getSubscriptionEndTime() {
        return subscriptionEndTime;
    }
    
    public void setSubscriptionEndTime(LocalDateTime subscriptionEndTime) {
        this.subscriptionEndTime = subscriptionEndTime;
    }
    
    public Long getApiLimitMonthly() {
        return apiLimitMonthly;
    }
    
    public void setApiLimitMonthly(Long apiLimitMonthly) {
        this.apiLimitMonthly = apiLimitMonthly;
    }
    
    public Long getContentLimitMonthly() {
        return contentLimitMonthly;
    }
    
    public void setContentLimitMonthly(Long contentLimitMonthly) {
        this.contentLimitMonthly = contentLimitMonthly;
    }
    
    public Integer getKeywordLimit() {
        return keywordLimit;
    }
    
    public void setKeywordLimit(Integer keywordLimit) {
        this.keywordLimit = keywordLimit;
    }
    
    public Integer getDataRetentionDays() {
        return dataRetentionDays;
    }
    
    public void setDataRetentionDays(Integer dataRetentionDays) {
        this.dataRetentionDays = dataRetentionDays;
    }
    
    public String getCreateBy() {
        return super.getCreateBy();
    }
    
    public void setCreateBy(String createBy) {
        super.setCreateBy(createBy);
    }
    
    public LocalDateTime getLastActiveTime() {
        return lastActiveTime;
    }
    
    public void setLastActiveTime(LocalDateTime lastActiveTime) {
        this.lastActiveTime = lastActiveTime;
    }
    
    public String getContactName() {
        return contactName;
    }
    
    public void setContactName(String contactName) {
        this.contactName = contactName;
    }
    
    public String getContactPhone() {
        return contactPhone;
    }
    
    public void setContactPhone(String contactPhone) {
        this.contactPhone = contactPhone;
    }
    
    public String getContactEmail() {
        return contactEmail;
    }
    
    public void setContactEmail(String contactEmail) {
        this.contactEmail = contactEmail;
    }
    
    public String getShortName() {
        return shortName;
    }
    
    public void setShortName(String shortName) {
        this.shortName = shortName;
    }
    
    public String getEnglishName() {
        return englishName;
    }
    
    public void setEnglishName(String englishName) {
        this.englishName = englishName;
    }
    
    public String getDescription() {
        return description;
    }
    
    public void setDescription(String description) {
        this.description = description;
    }
    
    public String getWebsite() {
        return website;
    }
    
    public void setWebsite(String website) {
        this.website = website;
    }
    
    public String getIndustry() {
        return industry;
    }
    
    public void setIndustry(String industry) {
        this.industry = industry;
    }
    
    public String getCompanySize() {
        return companySize;
    }
    
    public void setCompanySize(String companySize) {
        this.companySize = companySize;
    }
    
    public String getUpdateBy() {
        return super.getUpdateBy();
    }
    
    public void setUpdateBy(String updateBy) {
        super.setUpdateBy(updateBy);
    }
    
    // 添加缺失的getter和setter方法
    public String getCity() {
        return city;
    }
    
    public void setCity(String city) {
        this.city = city;
    }
    
    public String getProvince() {
        return province;
    }
    
    public void setProvince(String province) {
        this.province = province;
    }
    
    public String getCountry() {
        return country;
    }
    
    public void setCountry(String country) {
        this.country = country;
    }
    
    public void setCertificationFiles(String certificationFiles) {
        this.certificationFiles = certificationFiles;
    }
    
    public void setVerificationTime(LocalDateTime verificationTime) {
        this.verificationTime = verificationTime;
    }
    
    public void setVerificationRemark(String verificationRemark) {
        this.verificationRemark = verificationRemark;
    }
}